package com.tabjin.rfidsocket.service.access;

import com.tabjin.rfidsocket.common.utils.PagedGridResult;
import com.tabjin.rfidsocket.pojo.*;
import com.tabjin.rfidsocket.pojo.bo.access.ArchProjectBO;
import com.tabjin.rfidsocket.pojo.vo.access.ArchProjectVO;

import java.util.List;
import java.util.Optional;

public interface ArchProjectService {
    /**
     * 添加项目
     *
     * @return
     */
    ArchProjectVO add(ArchProjectBO bo);

    /**
     * 更新项目
     *
     * @param bo
     * @return ArchProject
     */
    ArchProjectVO update(ArchProjectBO bo);

    /**
     * 删除项目
     *
     * @param id 项目id
     * @return
     */
    ArchProject delete(Integer id);

    /**
     * 获取所有项目
     *
     * @param page
     * @param pageSize
     * @return
     */
    PagedGridResult getAll(Integer page, Integer pageSize);

    /**
     * 获取项目详情
     *
     * @param projectId
     * @return
     */
    ArchProjectVO getEachProject(Integer projectId);

    Optional<List<ArchProject>> getProjectByManagerId(Integer managerId);

    /**
     * 根据县区获取项目
     *
     * @param region
     * @return
     */
    Optional<List<ArchProject>> getProjectsByRegion(String region);

    PagedGridResult projectsFilter(Integer page, Integer pageSize, String province, String city, String projectName);

    /**
     * 根据用户 id 获取 项目 id
     *
     * @param userId
     * @return
     */
    Optional<List<ArchProjectBuildingUser>> getProjectIdByUserId(Integer userId);

    /**
     * 获取项目基础设施
     *
     * @param archProjectInfrastructureId 项目基础设施id
     * @return
     */
    List<ArchProjectInfrastructure> getArchProjectInfrastructure(Integer archProjectInfrastructureId);

    /**
     * 获取开发商
     *
     * @param archDeveloperId 开发商id
     * @return
     */
    List<ArchDeveloper> getArchDeveloper(Integer archDeveloperId);

    /**
     * 获取物管办公区域
     *
     * @param archPropertyManagementOfficeAreaId 物管办公区域id
     * @return
     */
    List<ArchPropertyManagementOfficeArea> getArchPropertyManagementOfficeArea(Integer archPropertyManagementOfficeAreaId);
}
